﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace JeuDeDames_v1._02
{
    public class Coup
    {
        #region Constantes
        public const int BLANC = -1;
        public const int NOIR = 1; 
        #endregion

        #region Propriétés
        public int nbTour;      //tour durant lequel le coup est joué
        public CaseN orig;   //case où il y a la piece à déplacer
        public CaseN pMangee;   //case où se trouve la piece mangée
        public CaseN dest;      //case d'arrivée de la piece d'orig
        public Joueur j;
        public Piece pPrise; 
        #endregion

        #region Constructeurs
        public Coup(int nbTour, CaseN orig, CaseN pMangee, CaseN dest)
        {
            this.nbTour = nbTour;
            this.orig = orig;
            this.pMangee = pMangee;
            this.dest = dest;
            this.j = this.orig.piece.j;
            if (pMangee != null)
                this.pPrise = pMangee.piece;
            else
                this.pPrise = null;
        }

        public Coup(int nbTour, CaseN orig, CaseN dest) : this(nbTour, orig, null, dest) { }

        public Coup(int tour) : this(tour, null, null) { } 
        #endregion

        #region Méthodes
        public static string convertPosition(int position)
        {
            int ligne = (int)(position / 10) + 1;
            string pos = "";
            if (position % 10 == 0)
                pos = "A" + ligne;
            else if (position % 10 == 1)
                pos = "B" + ligne;
            else if (position % 10 == 2)
                pos = "C" + ligne;
            else if (position % 10 == 3)
                pos = "D" + ligne;
            else if (position % 10 == 4)
                pos = "E" + ligne;
            else if (position % 10 == 5)
                pos = "F" + ligne;
            else if (position % 10 == 6)
                pos = "G" + ligne;
            else if (position % 10 == 7)
                pos = "H" + ligne;
            else if (position % 10 == 8)
                pos = "I" + ligne;
            else if (position % 10 == 9)
                pos = "J" + ligne;
            return pos;
        }//convertPosition();

        public static int convertInt(string cases)
        {
            int position = -1;
            try
            {
                int colonne = 0, ligne = 0;
                cases = cases.ToUpper();
                colonne = Convert.ToInt32(cases[0]) - 65;
                if (colonne >= 0 && colonne <= 9)
                {
                    try
                    {
                        ligne = Convert.ToInt32(cases.Substring(1));
                        if (!(ligne >= 1 && ligne <= 10))
                            return -1;
                    }
                    catch (FormatException) { return -1; }
                }

                position = 10 * (ligne - 1) + colonne;
            }
            catch (IndexOutOfRangeException) { return -1; }
            return position;
        }//convertInt();  retourne la case correspondante à celle en paramètre si valable -1 sinon

        public bool mange()
        {
            return pMangee != null;
        }//mange(); indique si une piece est mangée en jouant ce coup.

        public override string ToString()
        {
            try
            {
                if (!mange())
                {
                    if (j.couleur == BLANC)
                        return "B" + nbTour + "(" + convertPosition(this.orig.pos) + "," + convertPosition(this.dest.pos) + ")";
                    else if (j.couleur == NOIR)
                        return "N" + nbTour + "(" + convertPosition(this.orig.pos) + "," + convertPosition(this.dest.pos) + ")";
                }
                else if (mange())
                {
                    if (j.couleur == BLANC)
                        return "B" + nbTour + "(" + convertPosition(this.orig.pos) + "," + convertPosition(this.pMangee.pos) + "," + convertPosition(this.dest.pos) + ")";
                    else if (j.couleur == NOIR)
                        return "N" + nbTour + "(" + convertPosition(this.orig.pos) + "," + convertPosition(this.pMangee.pos) + "," + convertPosition(this.dest.pos) + ")";
                }
            }
            catch (NullReferenceException) { }
            return " ";
        }//ToString(); 
        #endregion
    }
}
